import { registerMicroApps, addGlobalUncaughtErrorHandler, start } from 'qiankun'
import { Message } from 'element-ui'
import Router from '@/router'
import Store from '@/store'
const microOptions = {
  prefetch: false, // 在第一个微应用 mount 完成后开始预加载其他微应用的静态资源，默认true
  sandbox: {
    // 使用shadow box 样式隔离，这会导致无法使用引用:root下的样式，关闭
    strictStyleIsolation: false
    // 父子应用样式隔离,会导致添加到body的组件无法正常显示
    // experimentalStyleIsolation: true
  }
}

const startQiankun = () => {
  const apps = Store.state.serviceList.map((v) => ({
    name: v.serviceName,
    entry: v.serviceEntry, // 需要区分是本地还是生产
    container: `#${v.serviceName}`,
    activeRule: `/portal/${v.serviceName}`,
    props: {
      appRouter: Router
    }
  }))

  // 根据接口返回的微服务列表，注册微服务
  registerMicroApps(apps, {
    beforeLoad(app) {
      console.log(app, '微服务注册成功')
      // 加载初次微服务耗时较长loading响应处理
      Store.dispatch('toggleQianKunStatus', true)
      // 加载子应用前，加载进度条
      return Promise.resolve()
    },
    afterMount() {
      Store.dispatch('toggleQianKunStatus', false)
      // 加载子应用前，进度条加载完成
      return Promise.resolve()
    }
  })

  addGlobalUncaughtErrorHandler((event) => {
    const { message } = event
    // 加载失败时提示
    if (message && message.includes('died in status LOADING_SOURCE_CODE')) {
      Message.error('微服务加载失败')
    }
  })

  // 启动微服务
  start(microOptions)
}
export default startQiankun
